/*
返回给定扑克牌是否有同花顺
 */
function isStraightFlush(cards) {
    // 用一个数组表示4种花色的牌
    let suits = [[], [], [], []];
    for (let i = 0; i < cards.length; i++) {
        let card = cards[i];
        let suit = card.charAt(card.length - 1);
        let value = card.substring(0, card.length - 1);
        // 按花色入suits数组
        suits[suitToIndex(suit)].push(valueToIndex(value));
    }
    // 判断每种花色的牌是否连续
    for (let i = 0; i < 4; i++) {
        let suit = suits[i];
        suit.sort((a, b) => a - b);
        if (suit.length < 5) {
            continue;
        }
        // 1 2 3 4 5 6 7
        for (let j = 0; j <= suit.length - 5; j++) {
            // 因为已经sort过了(每个花色每个数字只有一张牌所以不会出现重复) 所以可以这么判断
            if (suit[j] + 4 !== suit[j + 4]) {
                return false;
            }
        }
    }
    return true;
}
// 将牌面值转换为数字索引
function valueToIndex(value) {
    switch (value) {
        case 'A':
            return 1;
        case 'T':
            return 10;
        case 'J':
            return 11;
        case 'Q':
            return 12;
        case 'K':
            return 13;
        default:
            return parseInt(value);
    }
}
// 将花色转换为数字索引
function suitToIndex(suit) {
    switch (suit) {
        case 's':
            return 0;
        case 'h':
            return 1;
        case 'd':
            return 2;
        case 'c':
            return 3;
    }
}
// 测试代码
console.log(isStraightFlush(['As', '2s', '3s', '4s', '5s', '6s', '7s'])); // true
console.log(isStraightFlush(['As', '2s', '3s', '4s', '5s', '6s', '8s'])); // false
